﻿/*
3 3
1 2 3
2 1 3
1 2 3
*/
// 区域价值矩阵 -- 分配空间
string[] s = Console.ReadLine().Split(' ');
if (s.Length != 2)
{
    Console.WriteLine("输入数据有误，只需要2个数字！");
    return;
}
int n = Convert.ToInt32(s[0]);
int m = Convert.ToInt32(s[1]);
int[,] value = new int[n, m];

// 区域价值矩阵 -- 赋值
int[] lineValue = new int[n]; // 行价值
int[] columnValue = new int[m]; // 列价值
for (int i = 0; i < n; i++)
{
    string[] line = Console.ReadLine().Split(' ');
    if (line.Length != m)
    {
        Console.WriteLine("输入数据有误，请注意列数！");
        return;
    }

    for (int j = 0; j < m; j++)
    {
        value[i, j] = Convert.ToInt32(line[j]);
        lineValue[i] += value[i, j]; // 更新行价值
        columnValue[j] += value[i, j]; // 更新列价值
    }
}

// 记录最小价值差
int result = Int32.MaxValue; // 最终结果
int temp = 0; // 辅助变量
// 按行划分
int sum = 0;
int[] lineSumValue = new int[n]; // 行累加和矩阵
for (int i = 0; i < n; i++)
{
    sum += lineValue[i];
    lineSumValue[i] = sum;
}
for (int i = 0; i < n; i++)
{
    if (i == 0)
    {
        temp = lineSumValue[n-1];
    }
    else
    {
        temp = Math.Abs(lineSumValue[n-1] - 2 * lineSumValue[i-1]);
    }

    result = result > temp ? temp : result; // 更新
}
// 按列划分
sum = 0;
int[] columnSumValue = new int[m]; // 行累加和矩阵
for (int i = 0; i < m; i++)
{
    sum += columnValue[i];
    columnSumValue[i] = sum;
}
for (int i = 0; i < m; i++)
{
    if (i == 0)
    {
        temp = columnSumValue[m-1];
    }
    else
    {
        temp = Math.Abs(columnSumValue[m-1] - 2 * columnSumValue[i-1]);
    }

    result = result > temp ? temp : result; // 更新
}
Console.WriteLine(result);